var MsgHub =
{
	__nodeId : 0,
	_listenerList : [], // eventName : eventName , callback : function(...), node : cc.Node }

	_msgList : [],//消息队列。

	emit: function emit(eventName, msg, delay ) //发送消息
	{
		if( !delay )
		{
            this._popMsg([eventName, msg ] );
		}
		else
		{
			this._msgList.push([eventName, msg]); //一条消息NODE;
		}
	},
	popDelayMsg : function( delayKey )
	{
		if( this._msgListDelay[ delayKey ] )
		{
			var list = this._msgListDelay[ delayKey ];
			for(var i=0;i<list.length;i++)
			{
				this._msgList.push( list[i] );
			}
		}
		delete this._msgListDelay[ delayKey ];
	},
    popMsg : function() //弹出一条消息。
    {
		if (this._msgList.length > 0)
		{
            this._popMsg( this._msgList.splice(0, 1)[0] );
		}
    },
    _popMsg : function( msg ) {
        for (var i = 0; i < this._listenerList.length; i++)
        {
            if (this._listenerList[i].eventName === msg[0]/*eventName*/)
            {
                this._listenerList[i].callback.call(this._listenerList[i].node, msg[1]/*eventDetail*/);
            }
        }
    },
	addListener : function(eventName,cb,node) //增加事件。
	{
		node.__msgHubId = this.__nodeId ++; //注册一个唯一的事件ID。用来领取自己的事件。
		this._listenerList.push( { eventName : eventName, callback : cb, node : node } );
	},
	delOneListener : function(eventName,node) //移除事件
	{
		for(var i=0;i<this._listenerList.length;i++)
		{
			if( this._listenerList[i].eventName === eventName && this._listenerList[i].node.__msgHubId === node.__msgHubId )
			{
				this._listenerList.splice(i,1);
				return;
			}
		}
	},
	delListener : function(node) //移除NODE注册的所有事件。
	{
		for(var i=0;i<this._listenerList.length;)
		{
			if( this._listenerList[i].node.__msgHubId === node.__msgHubId )
			{
				this._listenerList.splice(i,1);
			}
			else
			{
				i++;
			}
		}
	}
};

cc.utils.msgHub = MsgHub;
module.exports = MsgHub;